#region OpenNETCF Copyright Information
/*
Copyright (c) 2007 OpenNETCF Consulting, LLC

Permission is hereby granted, free of charge, to any person obtaining a copy of this software 
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 
subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial 
portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, 
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR 
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE 
FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#endregion

using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Text;

namespace OpenNETCF.WindowsMobile.Ink.Interfaces
{
[
    ComImport,
  Guid("F1F4C9D8-590A-4963-B3AE-1935671BB6F3"),
    InterfaceType(ComInterfaceType.InterfaceIsDual)
]
public interface IInkStrokes {
    /// <summary>
    /// Contains the collection of Stroke objects that represent a float ink stroke
    /// </summary>
    [DispId(0x00000001)]
    int Count{get;}
    
    [DispId(-4)]
    object _NewEnum{get;}
    /// <summary>
    /// Returns the Ink object that contains a collection of strokes
    /// </summary>
    [DispId(0x00000003)]
    IInkDisp Ink{get;}
    
    /// <summary>
    /// Returns the recognition result of the Strokes collection
    /// </summary>
    [DispId(0x00000012)]
    IInkRecognitionResult RecognitionResult{get;}
    
    /// <summary>
    /// For a Strokes collection, returns the recognized text of the strokes
    /// </summary>
    /// <returns></returns>
    [DispId(0x00000008)]
    string ToString();

    [DispId(00000000)]
    /*IInkStrokeDisp*/ object Item(int Index);
    
    /// <summary>
    /// Specifies the stroke to add to a collection of strokes
    /// </summary>
    /// <param name="InkStroke"></param>
    [DispId(0x00000004)]
    void Add(/*IInkStrokeDisp*/ object InkStroke);
    
    /// <summary>
    /// Specifies the collection of strokes to add to a collection of strokes
    /// </summary>
    /// <param name="InkStrokes"></param>
    [DispId(0x00000005)]
    void AddStrokes(IInkStrokes InkStrokes);
    /// <summary>
    /// Specifies the stroke or collection of strokes to remove from the given collection of strokes
    /// </summary>
    /// <param name="InkStroke"></param>
    [DispId(0x00000006)]
    void Remove(IInkStrokeDisp InkStroke);
    
    /// <summary>
    /// Specifies the given Strokes collection to remove from the Strokes collection
    /// </summary>
    /// <param name="InkStrokes"></param>
    [DispId(0x00000007)]
    void RemoveStrokes(IInkStrokes InkStrokes);
    
    /// <summary>
    /// Specifies the drawing attributes of all of the strokes in a collection of strokes
    /// </summary>
    /// <param name="DrawAttrs"></param>
    [DispId(0x00000009)]
    void ModifyDrawingAttributes(/*IInkDrawingAttributes*/ object DrawAttrs);
    
    [DispId(0x0000000a)]
    IInkRectangle GetBoundingBox(InkBoundingBoxMode BoundingBoxMode);
    
    /// <summary>
    /// Specifies the application of scaling, rotation, translation and skewing of Stroke 
    /// collections/Ink objects in a float operation, as opposed to individual operations
    /// </summary>
    /// <param name="Transform"></param>
    /// <param name="ApplyOnPenWidth"></param>
    [DispId(0x0000000c)]
    void Transform(IInkTransform Transform, bool ApplyOnPenWidth);
    
    /// <summary>
    /// Specifies the stroke or collection of strokes to be scaled to fit in the specified rectangle
    /// </summary>
    /// <param name="Rectangle"></param>
    [DispId(0x0000000b)]
    void ScaleToRectangle(IInkRectangle Rectangle);
    
    [DispId(0x0000000d)]
    void Move(
                    float HorizontalComponent, 
                    float VerticalComponent);
    
    [DispId(0x0000000e)]
    void Rotate(
                    float Degrees, 
                    float x,
                    float y);
    [DispId(0x0000000f)]
    void Shear(
                    float HorizontalMultiplier, 
                    float VerticalMultiplier);
    [DispId(0x00000010)]
    void ScaleTransform(
                    float HorizontalMultiplier, 
                    float VerticalMultiplier);
    
    [DispId(0x00000011)]
    void Clip(IInkRectangle Rectangle);
    
    /// <summary>
    /// Removes the RecognitionResult associated with the Strokes collection
    /// </summary>
    /// <returns></returns>
    [DispId(0x00000013)]
    void RemoveRecognitionResult();
}
}
